package com.cslg.controller;

import com.alibaba.fastjson.JSON;
import com.cslg.pojo.Counts;
import com.cslg.pojo.User;
import com.cslg.service.UserService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class UserController {
    //自动注入对象
    @Autowired
    private UserService userService;
    //登陆控制器
    @RequestMapping("/login")
    public String login(String id, String password,String checkcode, HttpServletRequest request,HttpSession session){//接收用户提交过来的id和密码
        System.out.println("id:"+id+",密码："+password+",验证码："+checkcode);
        //先验证验证码是否正确
        //获得session中保存的验证码
        String loginmsg="验证码错误！";
        String code = (String)session.getAttribute("code");//获取系统产生的验证码code
        if (checkcode!=null&&!"".equals(checkcode)){//checkcode为用户输入的验证码
            if (checkcode.equalsIgnoreCase(code)){//验证成功,equalsIgnoreCase：比较的同时也不区分大小写
                //将数据提交给service层
                //调用service层登陆的方法
                User user = userService.loginFunction(id,password);
                if (user!=null){    //若登陆成功，跳转到mian界面
                    //去数据库查询各个表的数据的数量
                    Counts counts = userService.selectCounts();
                    System.out.println("各个表的数量："+counts);
                    session.setAttribute("counts", counts);
                    //将用户保存到 session中，因为在其他地方需要用到
                    session.setAttribute("user", user);
                    String timeString = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(user.getCreatedate());//格式化时间字符串
                    session.setAttribute("timeString", timeString);//将格式化的时间字符串保存到session中
                    return "main";
                }else {             //若登陆失败，跳转到登陆页面
                    loginmsg="登陆失败，请检查用户名或密码！";
                }
            }
        }
        //要返回登陆失败的数据给前端
        //放数据到request域中供前端获取
        request.setAttribute("loginmsg", loginmsg);
        return "index";
    }
    //退出登陆
    @RequestMapping("/logout")
    public String logout(HttpSession session){
        //退出登陆的思路是将session中的对象删除
        session.removeAttribute("user");
        return "index";
    }
    //检查手机号码
    @RequestMapping("/checkPhone")
    @ResponseBody
    public String checkPhone(String phoneString){//接收到电话号码
        System.out.println("验证的手机号："+phoneString);
        //将接收到的手机号到service中查询数据
        int i = userService.checkPhone(phoneString);
        return i+"";
    }
    //注册
    @RequestMapping(value = "/register.do",produces = "text/html;charset=UTF-8")
    @ResponseBody
    public String register(String checkcode,String json,HttpSession session){//接收用户提交过来的id和密码
        System.out.println("验证码："+checkcode+",注册数据："+json);
        //先验证验证码是否正确
        //获得session中保存的验证码
        String loginmsg="-1";//表示验证码错误
        String code = (String)session.getAttribute("code");//获取系统产生的验证码code
        if (checkcode!=null&&!"".equals(checkcode)){//checkcode为用户输入的验证码
            if (checkcode.equalsIgnoreCase(code)){//验证成功,equalsIgnoreCase：比较的同时也不区分大小写
                //去数据库完成输出功能，调用service
                int i = userService.insertUser(json);
                if (i>0){//注册成功
                    loginmsg = "1";
                }else {//注册失败
                    loginmsg = "0";
                }
            }
        }
        return loginmsg;
    }

    @RequestMapping(value = "/selectUser.do",produces = "text/application;charset=UTF-8")
    @ResponseBody
    public String selectUser(int page,int limit){
        //LayUI框架会自动提交两个参数，page(当前页),limit(显示的条数)
        System.out.println("当前页："+page+",显示的条数："+limit);
        int start = (page-1)*limit;
        //使用mybatis的分页插件
        PageHelper.startPage(start,limit);
        //查询数据库，调用service层
        List<User> list = userService.selectUsers();
        list.forEach(li-> System.out.println(li));
        PageInfo<User> pageInfo = new PageInfo<>(list);
        long total = pageInfo.getTotal();
        System.out.println("总条数："+total);

        //开始构建json数据，提供给前端使用
        Map<String,Object> map = new HashMap<>();
        map.put("code", 0);
        map.put("msg", "拼命加载中");
        map.put("count", total);
        map.put("data", list);

        String json = JSON.toJSONString(map);
        System.out.println("构建的json数据："+json);

        return json;
    }
    @RequestMapping(value = "/updateUser.do",produces = "text/application;charset=UTF-8")
    @ResponseBody
    public String updateUser(String json){
        System.out.println("修改的数据："+json);
        //将json数据封装成User对象
        User user = JSON.parseObject(json, User.class);
        //去service完成修改操作
        int i = userService.updateUser(user);
        return i+"";
    }
    @RequestMapping(value = "/deleteById.do",produces = "text/application;charset=UTF-8")
    @ResponseBody
    public String deleteById(int id){
        System.out.println("要删除的id："+id);
        //去service完成修改操作
        int i = userService.deleteUser(id);
        return i+"";
    }
}
